// https://leetcode.cn/problems/design-twitter/
// Created by ade on 2022/11/1.
//

class Twitter {
public:
    vector <pair<int, int>> userTweets = {};// user_id->tweet_id
    unordered_map<int, unordered_set<int>> follows = {};

    Twitter() {

    }

    // 用户发送推文 检索当前用户新闻推送中最近  10 条推文的 ID 。新闻推送中的每一项都必须是由用户关注的人或者是用户自己发布的推文。推文必须 按照时间顺序由最近到最远排序 。
    void postTweet(int userId, int tweetId) {
        userTweets.push_back({userId, tweetId});
    }

    // 获取某个人最近的10条推送
    vector<int> getNewsFeed(int userId) {
        unordered_set<int> users = follows[userId];
        users.insert(userId);
        vector<int> res = {};
        for (int i = userTweets.size() - 1; i >= 0; i--) {
            if (users.find(userTweets[i].first) != users.end()) {
                res.push_back(userTweets[i].second);
            }
            if (res.size() == 10) break;
        }
        return res;
    }

    // 关注
    void follow(int followerId, int followeeId) {
        follows[followerId].insert(followeeId);
    }

    // 取消关注
    void unfollow(int followerId, int followeeId) {
        follows[followerId].erase(followeeId);
    }
};

/**
 * Your Twitter object will be instantiated and called as such:
 * Twitter* obj = new Twitter();
 * obj->postTweet(userId,tweetId);
 * vector<int> param_2 = obj->getNewsFeed(userId);
 * obj->follow(followerId,followeeId);
 * obj->unfollow(followerId,followeeId);
 */